home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / Libraries / SpriteEngine / SE Timer / SpriteHanders.c < prev    next >
C/C++ Source or Header  |  1995-03-12  |  4KB  |  150 lines

  1. #include "SpriteTools.h"
  2.  
  3. // SpriteTools.h includes SpriteHandlers.h
  4.  
  5.  
  6. /*** Custom handlers - application dependent ***
  7.  
  8. Edit this as necessary. It should always include the following three routines:
  9.  
  10. MoveSprite: move the sprite
  11.  
  12. HitSprite: handle collisions between two sprites
  13.  
  14. InitSprites: Load all faces and create initial sprites
  15.  
  16. ***/
  17.  
  18.  
  19. GrafPtr    firstFace, secondFace, thirdFace;
  20.  
  21.  
  22. void MoveSprite(SpritePtr theSprite)
  23. {
  24.     long    thisTime;
  25.     
  26.     thisTime = TickCount();
  27.     
  28.     while (theSprite->lastTime < thisTime)
  29.     {
  30.         theSprite->lastTime ++;
  31.         theSprite->speed.v++; // Simple gravity
  32.         theSprite->fixedPointPosition.h += theSprite->speed.h;
  33.         theSprite->fixedPointPosition.v += theSprite->speed.v;
  34.         theSprite->position.h = theSprite->fixedPointPosition.h >> 4;
  35.         theSprite->position.v = theSprite->fixedPointPosition.v >> 4;
  36.     };
  37.  
  38.     KeepOnScreenFixed(theSprite);
  39. } /*MoveSprite*/
  40.  
  41.  
  42. void HitSprite(SpritePtr theSprite, SpritePtr anotherSprite)
  43. {
  44.     short    tempSpeed;
  45.     
  46.     if (RectSeparate(theSprite, anotherSprite) >= 2) // 2 or 3: horizontal, otherwise vertical
  47.     {
  48.         tempSpeed = theSprite->speed.h;
  49.         theSprite->speed.h = anotherSprite->speed.h;
  50.         anotherSprite->speed.h = tempSpeed;
  51.         theSprite->fixedPointPosition.h = theSprite->position.h << 4;
  52.     }
  53.     else
  54.     {
  55.         tempSpeed = theSprite->speed.v;
  56.         theSprite->speed.v = anotherSprite->speed.v;
  57.         anotherSprite->speed.v = tempSpeed;
  58.         theSprite->fixedPointPosition.v = theSprite->position.v << 4;
  59.     }
  60.  
  61. } /*HitSprite*/
  62.  
  63.  
  64. void InitSprites()
  65. {
  66.     SpritePtr    theSprite;
  67.  
  68. /*Load all pictures*/
  69.     firstFace = LoadFaceFromCicn(128);            /*cicn resource #128.*/
  70.     secondFace = LoadFaceFromCicn(129);            /*cicn resource #129.*/
  71.     thirdFace = LoadFaceFromCicn(130);            /*cicn resource #130.*/
  72.  
  73. /*Create sprites*/
  74.     theSprite = NewSprite();
  75.     theSprite->face = firstFace;
  76.     SetPt(&theSprite->fixedPointPosition, 100 << 4, 100 << 4);
  77.     SetPt(&theSprite->speed, Rand(7)-3, Rand(7)-3);
  78.     theSprite->lastTime = TickCount();
  79.  
  80.     theSprite = NewSprite();
  81.     theSprite->face = secondFace;
  82.     SetPt(&theSprite->fixedPointPosition, 50 << 4, 50 << 4);
  83.     SetPt(&theSprite->speed, Rand(7)-3, Rand(7)-3);
  84.     theSprite->lastTime = TickCount();
  85.  
  86.     theSprite = NewSprite();
  87.     theSprite->face = thirdFace;
  88.     SetPt(&theSprite->fixedPointPosition, 150 << 4, 150 << 4);
  89.     SetPt(&theSprite->speed, Rand(7)-3, Rand(7)-3);
  90.     theSprite->lastTime = TickCount();
  91.  
  92.  
  93. // extra
  94.  
  95.     theSprite = NewSprite();
  96.     theSprite->face = firstFace;
  97.     SetPt(&theSprite->fixedPointPosition, 100 << 4, 100 << 4);
  98.     SetPt(&theSprite->speed, Rand(15)-7, Rand(7)-3);
  99.     theSprite->lastTime = TickCount();
  100.  
  101.     theSprite = NewSprite();
  102.     theSprite->face = secondFace;
  103.     SetPt(&theSprite->fixedPointPosition, 50 << 4, 50 << 4);
  104.     SetPt(&theSprite->speed, Rand(15)-7, Rand(7)-3);
  105.     theSprite->lastTime = TickCount();
  106.  
  107.     theSprite = NewSprite();
  108.     theSprite->face = thirdFace;
  109.     SetPt(&theSprite->fixedPointPosition, 150 << 4, 150 << 4);
  110.     SetPt(&theSprite->speed, Rand(15)-7, Rand(7)-3);
  111.     theSprite->lastTime = TickCount();
  112.  
  113.     theSprite = NewSprite();
  114.     theSprite->face = firstFace;
  115.     SetPt(&theSprite->fixedPointPosition, 100 << 4, 100 << 4);
  116.     SetPt(&theSprite->speed, Rand(15)-7, Rand(7)-3);
  117.     theSprite->lastTime = TickCount();
  118.  
  119.     theSprite = NewSprite();
  120.     theSprite->face = secondFace;
  121.     SetPt(&theSprite->fixedPointPosition, 50 << 4, 50 << 4);
  122.     SetPt(&theSprite->speed, Rand(15)-7, Rand(7)-3);
  123.     theSprite->lastTime = TickCount();
  124.  
  125.     theSprite = NewSprite();
  126.     theSprite->face = thirdFace;
  127.     SetPt(&theSprite->fixedPointPosition, 150 << 4, 150 << 4);
  128.     SetPt(&theSprite->speed, Rand(15)-7, Rand(7)-3);
  129.     theSprite->lastTime = TickCount();
  130.  
  131.     theSprite = NewSprite();
  132.     theSprite->face = firstFace;
  133.     SetPt(&theSprite->fixedPointPosition, 100 << 4, 100 << 4);
  134.     SetPt(&theSprite->speed, Rand(15)-7, Rand(7)-3);
  135.     theSprite->lastTime = TickCount();
  136.  
  137.     theSprite = NewSprite();
  138.     theSprite->face = secondFace;
  139.     SetPt(&theSprite->fixedPointPosition, 50 << 4, 50 << 4);
  140.     SetPt(&theSprite->speed, Rand(15)-7, Rand(7)-3);
  141.     theSprite->lastTime = TickCount();
  142.  
  143.     theSprite = NewSprite();
  144.     theSprite->face = thirdFace;
  145.     SetPt(&theSprite->fixedPointPosition, 150 << 4, 150 << 4);
  146.     SetPt(&theSprite->speed, Rand(15)-7, Rand(7)-3);
  147.     theSprite->lastTime = TickCount();
  148.  
  149. } /*InitSprites*/
  150.